home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 038a / aplibs91.zip / NEW-U.BAS < prev    next >
BASIC Source File  |  1991-07-16  |  9KB  |  319 lines

  1.  
  2.  
  3. '==============================================================================
  4. '                        ALL-PURPOSE LIBRARY
  5.  
  6. '                            NEW-U.BAS
  7. '==============================================================================
  8. '                                                               -- Spring 1991
  9. '                                                                  H Ballinger
  10.                             $COMPILE UNIT
  11.                             $ERROR ALL ON
  12.                             $OPTION CNTLBREAK ON
  13.  
  14.  
  15.  DEFINT A-Z
  16.  
  17.  EXTERNAL Escapable, UsingButtons, TopOfButtons, Buttons%, ButtonMsg$ ()
  18.  EXTERNAL UsePgDn, UsePgUp, LastSD ()
  19.   
  20.  
  21.  
  22.  DECLARE SUB Marker (string)
  23.  DECLARE SUB SCREENPUSH ()
  24.  DECLARE SUB SCREENPOP ()
  25.  DECLARE SUB QBox (integer,integer,integer,string,integer)
  26.  DECLARE SUB PressAKey ()
  27.  DECLARE SUB SUPERMENU (string array,integer,integer,integer,string,integer)
  28.  
  29.  %False = 0
  30.  %True = NOT %False
  31.  %No = %False
  32.  %Yes = NOT %No
  33.  
  34.  
  35. '  MENU RETURN CODES (KEY PRESSED.)
  36.       %CR = 0:    %Esc = &H20:          %F1 = &H100:           %F2 = &H200
  37.             %PgUp = &H400:              %PgDn = &H600
  38.             %RArrow = &H800:            %LArrow = &HA00
  39.  
  40. ' ----------------------------------------------------------------------------
  41.  
  42. FUNCTION ButtonIsClick (L, C) PUBLIC
  43.   SHARED Buttons%
  44.   LOCAL BClick
  45.   IF L >= TopOfButtons AND L < TopOfButtons + 5 THEN
  46.     SELECT CASE C
  47.      CASE < 2
  48.        EXIT SELECT
  49.      CASE < 16
  50.        BClick = 1
  51.        EXIT SELECT
  52.      CASE < 18
  53.        EXIT SELECT
  54.      CASE < 32
  55.        BClick = 2
  56.        EXIT SELECT
  57.      CASE < 34
  58.        EXIT SELECT
  59.      CASE < 48
  60.        BClick = 3
  61.        EXIT SELECT
  62.      CASE < 50
  63.        EXIT SELECT
  64.      CASE < 64
  65.        BClick = 4
  66.        EXIT SELECT
  67.      CASE < 66
  68.        EXIT SELECT
  69.      CASE < 80
  70.        BClick = 5
  71.     END SELECT
  72.     IF BClick > Buttons% THEN
  73.       ButtonIsClick = 0
  74.     ELSE
  75.       ButtonIsClick = BClick
  76.     END IF
  77.   ELSE
  78.     ButtonIsClick = 0
  79.   END IF
  80.  END FUNCTION
  81.  
  82.  
  83. SUB ButtonButton PUBLIC SHARED
  84. LOCAL BMask$, L, B
  85. LOCATE TopOfButtons, 1, 0
  86.  
  87.  PRINT LEFT$_
  88. (" ┌────────────╖  ┌────────────╖  ┌────────────╖  ┌────────────╖  ┌────────────╖ ",_
  89.             Buttons% * 16)
  90.  
  91. BMask$ = " │ \        \ ║ "
  92. FOR L = 1 TO 3
  93.   FOR B = 1 TO Buttons%
  94.     PRINT USING BMask$; ButtonMsg$ (B, L);
  95.   NEXT
  96.   PRINT
  97. NEXT
  98.  
  99.  PRINT LEFT$_
  100. (" ╘════════════╝  ╘════════════╝  ╘════════════╝  ╘════════════╝  ╘════════════╝  ",_
  101.             Buttons% * 16);
  102. END SUB '                         --------------------------- REM ButtonButton
  103.  
  104.  ' ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
  105.  
  106. FUNCTION PICKAFILE$ (D2Use$) PUBLIC
  107.  %FilesMaxInDir = 300
  108.  LOCAL T$ ()
  109.  D2Use$ = RTRIM$ (D2Use$, "\")
  110.  DO
  111.    REDIM DYNAMIC T$ (1:%FilesMaxInDir)
  112.    J = 1
  113.    T$ (J) = "  " + DIR$ (D2Use$+"\") + "      " + CHR$(255)
  114.    IF T$ (J) = "        " + CHR$(255) THEN DECR J
  115.    DO
  116.      INCR J
  117.      T$ (J) = "  " + DIR$ + "      " + CHR$(255)
  118.      IF T$ (J) = "        " + CHR$(255) THEN DECR J: EXIT LOOP
  119.      IF J = %FilesMaxInDir THEN
  120.        CALL SCREENPUSH
  121.        CALL QBox (%Center, %Center, 1 ,"THERE ARE OVER "_
  122.         + STR$(%FilesMaxInDir) + " FILES HERE. THEY CAN'T ALL BE SHOWN.", 0)
  123.         CALL PressAKey
  124.         EXIT LOOP
  125.       END IF
  126.    LOOP
  127.  
  128.    NumFiles = J
  129.    CALL QBox (8, 3, 1, STR$ (J) + " Files found", 0)
  130.    IF J > 0 THEN
  131.      ARRAY SORT T$() FOR NumFiles
  132.  
  133.          CALL MegaMenu (T$(), NumFiles, Choice, ItemChosen$)
  134.  
  135.      IF ItemChosen$ = "" THEN PickAFile$ = "": ERASE T$: EXIT FUNCTION
  136.      ItemChosen$ = RTRIM$ (ItemChosen$, ANY " "+CHR$(255))
  137.      ItemChosen$ = D2Use$ + "\" + LTRIM$ (ItemChosen$)
  138.      PICKAFILE$ = ItemChosen$
  139.      ERASE T$
  140.      EXIT LOOP
  141.    ELSE
  142.      EXIT LOOP
  143.    END IF
  144.  LOOP
  145.  END FUNCTION '                                            PICKAFILE$
  146.  
  147. SUB MegaMenu (Foo$(), Choices%, Choice, ItemChosen$) PUBLIC
  148.  CALL SCREENPUSH
  149.  DIM DYNAMIC M$ (1:23)
  150.  MenuPage = 1
  151.  C = 1
  152.  DO
  153.    FOR I = 1 TO 22
  154.      IF (MenuPage - 1) * 22 + I > Choices% THEN
  155.        M$ (I) = "END"
  156.      ELSE
  157.        M$ (I) = Foo$ ((MenuPage - 1) * 22 + I)
  158.      END IF
  159.    NEXT
  160.  
  161.    M$ (23) = "END"
  162.    MenuPages = FIX (Choices% / 22) + 1
  163.    IF MenuPages > 1 THEN Title$ = "PgUp/Pg-Dn for more"
  164.    IF MenuPage > 1 THEN UsePgUp = %Yes
  165.    IF MenuPage < MenuPages THEN UsePgDn = %Yes
  166.    MRt = MenuPages * -1
  167.  
  168.        CALL SUPERMENU (M$(), MRt + 2*MenuPage - 1, 30, C, Title$, Ky%)
  169.  
  170.    SELECT CASE Ky%
  171.      CASE %PgUp
  172.        DECR MenuPage
  173.        C = 22
  174.      CASE %PgDn
  175.        INCR MenuPage
  176.        C = 1
  177. ''     CASE %F1
  178. ''      GOSUB MenuHelpScrn
  179.    END SELECT
  180.  LOOP UNTIL Ky% = %Esc OR Ky% = %CR
  181.  Choice = C
  182.  IF Ky% = %Esc THEN
  183.    ItemChosen$ = "": Choice = 0
  184.  ELSE
  185.    ItemChosen$ = MID$ (M$ (Choice), 3)
  186.  END IF
  187.  CALL SCREENPOP
  188.  
  189. END SUB '                                                      MegaMenu
  190.  
  191.  
  192.  ' ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
  193.  
  194. FUNCTION PICKADIR$ PUBLIC
  195.  %DirAttr = 16
  196.  DIM DYNAMIC SDList$ (1024)
  197.  IF DIR$ ("PICKADIR.LST") = "" THEN
  198.    CALL SCREENPUSH
  199.    CALL QBox (4,0,1," SUBDIR SNIFFER",0)
  200.  
  201.       CALL LISTSUBDIR (SDList$ (), SD%)
  202.  
  203.    OutFil = FREEFILE
  204.    OPEN "PICKADIR.LST" FOR OUTPUT AS OutFil
  205.    PRINT "WRITING"; SD%; " ITEMS";
  206.    FOR M = 0 TO SD%-1
  207.      PRINT #OutFil, SDList$ (M)
  208.    NEXT
  209.    CLOSE OutFil
  210.    ARRAY INSERT SDList$ (), ""
  211.    CALL SCREENPOP
  212.  ELSE
  213.    InFil = FREEFILE
  214.  
  215.    OPEN "PICKADIR.LST" FOR INPUT AS InFil
  216.    M = 1
  217.    DO WHILE NOT EOF (InFil)
  218.      LINE INPUT #InFil, SDList$ (M)
  219.      INCR M
  220.    LOOP
  221.    CLOSE OutFil
  222.    SD% = M - 1
  223.  END IF
  224.  
  225.        CALL MegaMenu (SDList$(), SD%, Choice, ItemChosen$)
  226.  
  227.  IF ItemChosen$ = "" THEN PICKADIR$ = "": ERASE SDList$: EXIT FUNCTION
  228.  PICKADIR$ = ItemChosen$
  229.  ERASE SDList$
  230.  
  231.  END FUNCTION '                                            PICKADIR$
  232.  
  233.  
  234. ' $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  235.  
  236. SUB LISTSUBDIR (SDL$ (), DirCt) PUBLIC '  Obtains all directory and subdirectory
  237. '                                         names on the current drive; adds the
  238. '                                        root plus "A:\" & "B:\" and returns how
  239. '                                           many there are ("DirCt") and array,
  240. '                                      SDL$ (0 .. DirCt) with their names in it.
  241. '                                       Pressing ESC aborts sub with DirCt = 0.
  242.  
  243.  LOCAL Dr$(), PrevLevel, Ct, M
  244.  SHARED SDFound, Level, NoI, EscPressed
  245.  DIM DYNAMIC Dr$ (30, 40)
  246.  EscPressed = %False
  247.  SDFound =0
  248.  Level = 0
  249.  NoI = 0
  250.  Drv$ = GetCurrentDrive$
  251.  CALL LoadSD$ ("", Dr$()) '          load SD list for Level 0 (Root --
  252.  '                                           parameter of DIR$ will be "" + "\")
  253.  IF EscPressed THEN DirCt = 0: EXIT SUB
  254.  INCR Level
  255.  NoI = 0
  256.  DO
  257.    SDFound = %False
  258.    PrevLevel = Level - 1
  259.    LOCATE 12,1: PRINT STRING$ (80,205)
  260.    LOCATE 13,1: PRINT SPACE$ (80);
  261.    LOCATE 14,1: PRINT STRING$ (80,205)
  262.    FOR Ct = 0 TO  LastSD (PrevLevel)
  263.      S$ = Dr$ (PrevLevel, Ct)
  264.      LOCATE 13,17: PRINT "SUBSNIFF SEARCHING "; S$; " ON LEVEL "; Level; "       "
  265.      CALL LoadSD$ (S$, Dr$()) '                                load for Level
  266.      IF EscPressed THEN  '  using each previous-level dirname
  267.        DirCt = 0
  268.        DO: LOOP UNTIL INKEY$ = ""
  269.        EXIT SUB
  270.      END IF
  271.    NEXT Ct '                                   and check for escape key press
  272.    INCR Level: NoI = 0
  273.  LOOP UNTIL SDFound = %False
  274.  LastLevel = Level - 1
  275.  DirCt = 0
  276.  FOR Level = 0 TO LastLevel
  277.    FOR Ct = 0 TO LastSD (Level)
  278.      SDL$ (DirCt) = "  " + Drv$ + Dr$ (Level, Ct)
  279.      INCR DirCt
  280.    NEXT
  281.  NEXT
  282.  SDL$ (DirCt) = "  C:\": INCR DirCt
  283.  SDL$ (DirCt) = "  A:\": INCR DirCt
  284.  SDL$ (DirCt) = "  B:\": INCR DirCt
  285.  ARRAY SORT SDL$() FOR DirCt
  286. END SUB
  287.  
  288. SUB LoadSD (S$, Dr$())
  289.   LOCAL A%
  290.   SHARED SDFound, Level, NoI, EscPressed
  291.   X$ = DIR$ (S$+"\" , %DirAttr)
  292.   DO WHILE X$ <> ""
  293.     A% = ATTRIB (S$ + "\" + X$) MOD 32
  294.     IF A% = %DirAttr THEN
  295.       Dr$ (Level, NoI) = S$ + "\" +X$
  296.       SDFound = %True
  297.       INCR NoI
  298.     END IF
  299.     IF INKEY$ = CHR$ (27) THEN EscPressed = %True: EXIT LOOP
  300.     X$ = DIR$
  301.   LOOP UNTIL  X$ = ""
  302.   LastSD (Level) = NoI - 1
  303. END SUB
  304.  
  305. SUB ClockIcon PUBLIC
  306.  LOCAL L, C
  307.  L = CSRLIN: C = POS
  308.  LOCATE 16,1
  309.  PRINT "     ┌─────────────┐"
  310.  PRINT "     │      │      │"
  311.  PRINT "     │      │      │"
  312.  PRINT "     │      ∙───   │"
  313.  PRINT "     │             │"
  314.  PRINT "     │             │"
  315.  PRINT "     └─────────────┘";
  316.  LOCATE L, C
  317.  END SUB
  318.  
  319.